package test;
//代码块、代码片段、代码域、匿名方法
//为了识别代码的执行顺序，是否了解静态实例，看看每个类在执行的时候，是否执行了代码块
/**
 * @category 代码块
 *
 */
public class Codeblocks {
	//代码块特性：在代码块中赋值，代码块后定义，但是不能在代码块中使用
	//若想在代码块中使用，需在代码块中先定义
	{

		System.out.println("实例代码块");
		//实例代码块=每次实例化对象的时候，在调用构造方法时，自动执行一次
	}
	//======================================================================================
	static{																//区域Z(无关联域)
		aa = 11;
//		System.out.println(aa);
	}
	static int aa = 21;
	//-------------------------------
	{
		bb = 22;
//		System.out.println(bb);
	}
	int bb = 32; 
	/**
	 * 代码块中的一种执行状态：
	 * 非官方解释:
	 * 1----在代码块中先赋值，在代码块后定义，如此便不能在代码块中使用此变量，若再次定义时候与先赋值的值不同，则取后者
	 * 		加载、执行是两回事，是功能代码是否执行取决于位置，[若是方法，则在执行方法时就会执行功能语句]而代码块则不同(对象每次被实例化时)
	 * 		需要区分定义/调用/执行的区别。
	 * 官方解释:
	 * 		执行过程：static修饰成员在第一次使用该类时是会被加载到内存中
	 * 2.1--静态部分：类被第一次使用时，先加载静态成员变量的定义，在按照书写顺序由上到下执行
	 * 		如静态代码块内的代码和静态成员变量定义时的初始化过程。
	 * 2.2--实例部分：对象每次实例化时，先加载实例成员变量的定义，再按照书写的顺序由上到下执行
	 * 		如实例代码块内的代码和实例成员白能量定义是的初始化赋值过程
	 * */
	//======================================================================================
	//当子类中出现了与父类static修饰的方法同名同类型同参数列表不降低访问权限的方法(即类似重写的书写规则)
	//这并不是代表子类重写了父类static方法
	//而是，子类的该方法只是将父类当中的方法进行了隐藏，而非重写，这两个方法没有关系
	//父类引用指向子类对象时，只会调用父类的静态方法
	/**
	 * 如下两个题，分别会使用静态、非静态的print输出，会导致结果不同，原因如上
	 * */
	class Test{
		void testtt() {
			TestB1 t1 = new TestB1();
			t1.print();
			TestB2 t2 = new TestB2();
			t2.print();
			TestB1 t3 = new TestB2();
			t3.print();
		}
	}
	static class TestB1{
		static void print() {
			System.out.println("haha");
		}
	}
	static class TestB2 extends TestB1{
		static void print() {
			System.out.println("hoho");
		}
	}
	//======================================================================================
	static{
		System.out.println("静态代码块");
		//静态代码块仅在类被第一次使用时自动执行一次
	}
	public Codeblocks(){
		System.out.println(900);
	}
	public static void main(String[] args) {
		//调用main方法的时候，类调用main方法，就算是第一次执行
		System.out.println(800);
		Codeblocks t1 = new Codeblocks();
		Codeblocks t2 = new Codeblocks();
		Codeblocks t3 = new Codeblocks();
	}
	
}
